您现在的位置是:首页 > Excel技巧>Excel VBA 快速学习示例

Excel VBA程序开发自学宝典-Excel VBA 快速学习示例

发布于2022-04-150人已围观

作者:Mervyn Zhang

这次更新主要说一下循环,谢谢大家。

计算机之于人的优势之一在于,可以准确而不厌烦地重复某种动作,Excel中的数据处理,有时正是需要重复某种操作,尤其是面对体量较大的基础数据时。

奏是说,重复、枯燥滴数据处理,VBA快速又准确。也只有在这种情况下,才能在众人的惊呼声中完美装那啥。

Excel VBA程序开发自学宝典

重复,在编程中奏是循环,指定范围,然后对范围中的对象进行既定的操作。主要是是如下三个问题:

1,如何指定范围,奏是循环出现的范围;

2,如何在范围中定位对象,奏是指定需要操作的对象;

3,如何指定操作内容;

同志们,让我们举起一个活生生的小栗子:

话说“人民大食堂”是大家吃饭饭的地方,某一周呐,总共为大家提供五个菜,每人可以选四个,可选菜如下:

No.1 干煸菜花

Excel VBA程序开发自学宝典

No.2 香焗茄子

Excel VBA程序开发自学宝典

No.3 藕盒

No.4烤串

Excel VBA程序开发自学宝典

No.5 凉拌藕

Excel VBA程序开发自学宝典

哈哈,其实是俺的私房菜,有图有真相,大家贱笑啦。

有4人吃饭,分别是上官一,公孙二,司马三和欧阳四,食堂堂主有一个神奇小表格,用来记录大家一周内每天的选餐情况,至于他为啥记录这东西,俺也不知道,可能他是个变态吧。

表格滴结构是下面这个样子滴:

表1,“当日用餐情况”,用来记录某日4个人的选餐情况,如下:

Excel VBA程序开发自学宝典表2到表5,用于记录4个同志一周内每天的选餐情况,每一列表示一天,如上官一同志的选餐情况如下,9/17日的选餐与表1中“B2”单元格的内容相对应:

看来食堂堂主果然是个变态,他到底要实现什么功能呢?奏是在表1的“B1”单元格中输入9/12-9/18中的任一日期,嘎嘣一下就可以得到4个人这一天的选餐情况,信息就来源于后面的4个表格,俺想,这可能奏是大数据吧,不管你信不信,反正俺是信了。


关于如何实现这个功能,俺们有一个首先要面对滴问题,在循环的过程中,每一次操作的对象都是变化滴,之前俺们介绍的range("B2"),cells(2,2)神马的就不灵了,他们都是从一而终滴正人小君君,俺们需要滴是善变滴,世界在变,俺们也在变滴那种,这可肿么办捏?就在人民群众提出迫切需要滴时候,一个无敌变色小龙龙粗线啦,它奏是编程界俗称滴”变量“。


在程序语言中,俺们可以用字母或者字母滴组合表示变量.

举个小栗子,指定字母”i“为变色小龙龙,一句话奏行(考虑到我们这个例子里面,i主要代表1,2,3神马的,我们把i定义为一个代表整数的变量),这句话奏是 Dim(定义) i as(作为) integer(整数),请自动忽略括号中滴注释,也奏是 Dim i as integer。


有了变量这个货,俺们可以继续讨论大数据这个神奇滴东东咧,怎么跟我们前面的三个问题相对应呢?堂主的变态小表格涉及两个循环,分别来看一下对应的三个问题:

循环一是这样滴:

"当日用餐情况"表中,需要为B2到B5单元格赋值,赋值的信息来源表根据A2到A5的值判断,如为B3赋值时,A3值为“公孙二”,信息来源就是“公孙二”这个表格咧;

1,如何指定范围,奏是循环出现的范围;

循环一的操作范围奏是"当日用餐情况"表中B2到B5,其中B不变,也就是列不变,行数从2变到5,利用变量“i”表示出来是这样滴:

For i=2 to 5

Next i

奏用i来表示行数。

2,如何在范围中定位对象,奏是指定需要操作的对象;

在指定的i=2 to 5的范围内,i从2变到5,每次增加1,cells(i,2)就可以分别代表从B2到B5这几个单元格了,所以上面这两句话也就指定了俺们的操作范围。

3,如何指定操作内容;

操作内容是在循环范围内对指定的对象所做的操作,那么应该写在什么地方呢,嘿嘿,当然就是For i=2 to 5和Next i之间啦,因为这两句之间就是俺们的操作范围嘛。


循环一中对每一个对象的操作其实奏是另外一个循环,也奏是小堂主的循环二,这里有一个嵌套结构。

循环二是这样滴:

选定信息来源表后,如前面所说的B3的信息来源就是“公孙二”这个表格,对其A1到G1的值进行判断,如其值与“当日用餐情况”表B1的内容相同,则将对应列设定为信息来源列,对选定列中的选餐信息进行整合并赋予“当日用餐情况”B3单元格。举例:B1值为"2016/9/17",则将“公孙二”表格F列为信息来源列,对选餐信息进行整合并赋予“当日用餐情况”B3单元格,写成“凉拌藕+藕盒+烤串+干煸菜花”。


俺们先来给这个循环定义变量,Dim j as integer,俺赶脚大家都理解这句话了,这个循环的三个关键问题该如何分析呢?

3.1,如何指定范围,奏是循环出现的范围;

循环二的操作范围奏是信息来源表的A1到G1,其中1不变,也就是行数不变,列数从1变到7,利用变量“j”表示出来是这样滴:

For j=1 to 7

Next j

奏用j来表示列数。

3.2,如何在范围中定位对象,奏是指定需要操作的对象;

在指定的j=1 to7的范围内,j从2变到7,每次增加1,cells(1,j)就可以分别代表从A1到G1这几个单元格了,所以上面这两句话也就指定了俺们的操作范围。

3.3,如何指定操作内容;

这里的操作需要判断A1到G1的单元格值是否与“当日用餐情况”表B1的内容相同,如相同,则该列为信息来源列,通过宏录制是无法实现判断功能滴,这时候俺们有一句中英文结合的小咒语:

If the value of B2 in ”当日用餐情况“ sheet 等于 that of A1 to G1中的一个 in 信息来源表, then

干活

end。


干活的内容是啥呢? “当日用餐情况”表Bi值设定为信息来源表中信息来源列j的第2行+第3行+第4行+第5行,翻译成机器语言:

“当日用餐情况”表 Bi单元格 值为信息来源表 J2 值加J3 值加J4 值加J5

翻译成程序语言:

Sheets(“当日用餐情况”).cells(i,B).value=

sheets("信息来源表").cells(2,j).value+

sheets("信息来源表").cells(3,j).value+

sheets("信息来源表").cells(4,j).value+

sheets("信息来源表").cells(5,j).value

"信息来源表"这几个字是变化滴,应该与“当日用餐情况”表的Ai值保持一致,所以表的名字应该是“Sheets(“当日用餐情况”).cells(i,1).value”,这样程序应当作出相应修改,同时在几个菜名中间加上“+”,这奏是最终的程序语言了:

Sheets(“当日用餐情况”).cells(i,B).value=

sheets(Sheets(“当日用餐情况”).cells(i,1).value).cells(2,j).value + “+”

+sheets(Sheets(“当日用餐情况”).cells(i,1).value).cells(3,j).value+ “+”

+sheets(Sheets(“当日用餐情况”).cells(i,1).value).cells(4,j).value+ “+”

+sheets(Sheets(“当日用餐情况”).cells(i,1).value).cells(5,j).value

每个菜中间用“+”连接。

整个程序写下来是下面这个样子滴:

Dim i As Integer'定义变量i

Dim j As Integer'定义变量j

For i = 2 To 5'循环一的范围

For j = 1 To 7'循环二的范围

If Sheets(Sheets("当日用餐情况").Cells(i, 1).Value).Cells(1, j) = Sheets("当日用餐情况").Cells(1, 2).Value Then'咒语开始

Sheets("当日用餐情况").Cells(i, 2).Value = _

Sheets(Sheets("当日用餐情况").Cells(i, 1).Value).Cells(2, j) + "+" _

+ Sheets(Sheets("当日用餐情况").Cells(i, 1).Value).Cells(3, j) + "+" _

+ Sheets(Sheets("当日用餐情况").Cells(i, 1).Value).Cells(4, j) + "+" _

+ Sheets(Sheets("当日用餐情况").Cells(i, 1).Value).Cells(5, j)'咒语中间的干活内容

End If'咒语开始

Next j'循环二结束

Next I'循环一结束

通过这个小栗子,希望对大家理解循环能有一点儿帮助,关于VBA,还没想好后面写点儿什么,如果大家有啥具体需求,可以提出来,我尽量用小栗子说明。


这些是VBA入门的基础信息,大家贱笑啦,尤其是精通VBA的少侠们,俺这真真是班门摆弄斧子了,内心很多小惭愧咆哮而过,谢谢大家。

////////////////////////////////////////////////////////////////////////////////////////////////////////

2016/7/23

非常感谢大家的关注,那么,更新来啦。

之前的内容是VBA的工作原理,了解了原理之后,嗨嗨,做点儿自己想做的吧。

Excel VBA程序开发自学宝典马上当家做主人啦,让Excel干啥,他奏得干啥,对,奏是这种赶脚。

先来分析一下,Excel的日常数据操作内容,根据俺这些年的人生经验,主要是下面几点:

一、指定需要进行操作的“Sheet”;

二、指定目标sheet中的操作区域,一般可以为某行、某列、某单元格,反正你选啥就是啥;

三、完成对指定区域的操作,比如输入值或者函数、剪切复制神马滴。

上面的这些内容,都可以通过VBA来完成,连动动手指这样的活儿都不干了,高品质懒人都是一劳永逸滴。

下面逐条分析一下吧,先声明一下,每一个步骤的实现方法都有很多,我就捡喜欢的说吧。


一、指定需要进行操作的“Sheet”

每个Excel文件里面都有很多shit,哎呀呀,口语不大好,说臭了,是有很多sheet,如何指定需要的sheet呢,这就需要分析一下每个sheet的关键参数,俺们还是来举个小栗子吧。

话说“悟空”、“八戒”、“沙僧”是三个异父异母的亲兄弟,悟空行大,顺序号是1,八戒行二,顺序号是2,沙僧行三,顺序号是3,哥儿仨一个头磕到地上,保着唐僧西天取经,唐和尚为了方便分配任务,给他们在生产大队里设定了代号,悟空的代号是“泼猴”,八戒的代号是“呆子”,沙僧的代号是“老沙”。

现在御弟哥哥要残忍滴给大家分配任务,分配形式是单独面谈,先是悟空,那么唐长老怎么叫他呢,肯定不是“大圣哥哥小亲亲”神马的,前面交代的剧情里面木有这个东东,正确滴打开方式有三种:

1,悟空

2,徒弟1

3,泼猴

再介绍下去,大家要进入剧情啦,还是回到VBA滴问题,实在想看剧情,请关闭知乎,打开电视。

三种表示方式,在Excel里面都有体现,如下,黄圈圈是名字,大家都能看到;蓝圈圈是代号,组织内可见,通过属性窗口或者编程界面可见;绿线是序号,是排列顺序。


Excel VBA程序开发自学宝典

在三个表格中,指定表格“悟空”的方法如下,分别与上述三种方式相对应:

1, Sheets("悟空"),名称表示

2, Sheets(1),序号表示

3, 泼猴,代号表示

任选一种,指定表格滴任务就完成啦。


二、指定目标sheet中的操作区域

指定表格完成后,就该选择操作区域了,可以是单元格,也可以是行或列。

单元格可以用cells表示,也可以用range表示,削微有一点区别,比如同样表示单元格B2,使用cell表示为cells(2,2),使用range则表示为range("B2")。

行和列肿么表示捏?

如第一行,rows(1)或者rows("1:1")

如第一列,columns(1)或者columns("A:A")

还是那句话,有很多其他滴实现方式,还是捡我喜欢滴,好用滴说。


三、完成对指定区域的操作

指定了某一区域以后,就要进行我们要的操作啦。

那么问题来了,我现在有明确的想法,要在第一个sheet的A1单元格中输入“我要为张默文点赞”,完全不知道肿么写呀,只知道指定sheet,指定单元格,然后捏?还是不会呀,我要的东西你带来了吗?


其实只要把“要在第一个sheet的A1单元格中输入’我要为张默文点赞‘”这句大白话翻译一下就行咧,首先翻译成机器语言,“第一个sheet 单元格A1 值为'我要为张默文点赞'”,然后翻译成程序语言,指定sheet和单元格时,用前面讲的方法,两个斜体加粗的“滴”用“.”表示,就是程序语句啦,sheets(1).cells(1,1).value="我要为张默文点赞",最后面的.value="我要为张默文点赞"就是所说的特定操作啦。

对于不了解编程的同志,与其费力的介绍对象、属性、方法神马滴,还是这种方式简单、直接一点儿,总有人喜欢简单粗暴滴,程序员大哥大姐们又要贱笑啦。

那位看官说啦,俺们的需求可不只是输入个“我要为张默文点赞”这么简单,俺们还要为张默文付出更多,我要把这句话加粗显示,怎么实现呢?我对你们那些黑话也不清楚呢,我哪知道这个操作怎么用程序语言表示,木有关系,我们有法宝,“宏录制”,大杀器呀。

方法我们之前介绍过啦,我先选中A1单元格,然后开始录制,下面是我录制的结果

Excel VBA程序开发自学宝典

Selection.Font.Bold=True,翻译成机器语言,Selection(选中的内容,即A1单元格) Font(字体) Bolt(加粗)是True(真的),这样我们就得到我们要的方法啦,也就是在“cells(A1).”的后面要加的东西。



让我们从头回顾一下,要在第一个Sheet的A1单元格中输入“我要为张默文点赞”,并加粗显示,该如何实现呢?

Step1,翻译成机器语言

第一个sheet A1单元格 值为“我要为张默文点赞”

A1单元格 字体 加粗是真的

Step2,翻译成程序语言,

结合前面讲的指定sheet和区域的方法以及录制得到的操作方法,写出代码,用“.”代替“滴”

sheets(1).cells(1,1).value="我要为张默文点赞"

sheets(1).cells(1,1).Font.Bold=True

把这串代码复制到宏1()中,执行以下,奏看到下面的结果啦

Excel VBA程序开发自学宝典

还有啥操作是不会滴,录制奏行咧,这下大家满意了吧,谢谢大家。

Excel VBA程序开发自学宝典

介绍到目前为止呐,对于如何把手动操作转化为代码,同志们大概可能也许应该有个认识啦,如果要实现超人滴功能,就要加一些循环、选择神马滴进去啦。

如果大家喜欢,咱们下回接着说。

谢谢大家。




////////////////////////////////////////////////////////////////////////////////////////////////////////
2016/6/25
看到这个问题,忍不住想跟大家分享一下Excel VBA从入门到卧室的学习过程,希望大家能够喜欢。
入门滴话,可以参考下面滴步骤:

一、理解Excel VBA的工作原理

对编程不熟悉的童鞋,想要快速学习Excel VBA,应充分理解程序的运行过程,将程序的运行过程与人工操作相对应,理解程序可代替人工操作的原理,才能自由控滴制VBA这个小机器,才能为所欲为、肆无忌惮,才能高高兴兴上班去,平平安安回家来。

利用Excel VAB完成某种功能,其实是一段程序在Windows中的执行过程,该执行过程可模拟人的操作行为,实现功能的自动化,也就是人工小智能,下面通过一段人的操作行为与代码执行过程的对比,来介绍VBA的工作原理。

日常操作Excel,通常是对Excel中某一选定区域的操作,现假定需要实现的功能如下:将当前文件“Sheet1”中“A1”单元格的值设定为“100”。

人工操作的方法可按如下步骤完成:

1,将“sheet1”激活,设置为当前工作表;

2,选中单元格“A1”,将其设置为当前单元格;

3,在当前单元格“A1”中输入“100”。

对应的VBA代码如下:

Excel VBA程序开发自学宝典Sub Value()

Sheets("Sheet1").Select

Range("A1").Select

ActiveCell.Value = "100"

End Sub

其中Sub Value()及End Sub两句分别表示程序的开头和结尾,与操作过程无对应关系。中间的三句代码分别与人工操作的三个步骤相对应,选中“sheet1”,选中“A1”、设定选中的单元格值为“100”,如此分析可以看出,程序运行的每一步都是和人工操作相对应的。

二、获取代码

问题来了,俺还不会写代码,分析个屁屁呀,木有关系,代码都是可以自动的生成的,只需找到“宏”这位小哥就行啦。不过,这位小哥是不会轻易跟你见面哒,需要在Excel中召唤一下,请看VCR,啊啊,木有VCR,惭愧呀。

1,在“工具栏”空白处右击,粗线下面的弹出菜单,选择“自定义功能区”;

Excel VBA程序开发自学宝典

2,在“开发工具”选项前的方框中打勾勾,选择右下角的”确定“,完成。不用集齐龙珠,就这么神奇滴成功啦。

Excel VBA程序开发自学宝典 此时,可看到工具栏中多出了一般人木有的“开发工具”选项。

Excel VBA程序开发自学宝典 现在,我们可以通过“宏”录制的方式得到一段代码了,一旦启动宏录制功能,你在Excel中所作的任何操作都会以VBA代码滴形式如实哒记录下来,要启动录制功能,只要单击下面这个按钮奏行了。

Excel VBA程序开发自学宝典 单击“录制宏”按钮后,该按钮变成了“停止录制”。

Excel VBA程序开发自学宝典 同时跳出如下窗口,选择“确定”即可。

Excel VBA程序开发自学宝典

记录开始后,俺做了如下操作:

1,在单元格“A1”中输入“数字”;

2,在单元格“A2”中输入“1”;

3,利用填充的方式,在“A2”到“A101”中输入数字1到100;

4,选中A列

5,选中“筛选”功能;

6,仅显示如下数字

"13" , "17", "21", "25", "32", "35", "38", "43", "49", "5", "51", "56", "6", "62", "63", "71", "75","77", "80", "85", "87", "88", "94", "95", "97", "99"

该操作过程需要手动选择列表中的每一个数字;

7,显示结果如下:

Excel VBA程序开发自学宝典 完成上述操作后,选择“停止录制”按钮,此时,我们已经得到了记录上述操作过程的VBA代码,代码在哪里捏?选择“Visual Basic”按钮即可,细心的童鞋一定也发现了装×大法,“Alt+F11”。

Excel VBA程序开发自学宝典 在模块1中可以看到,代码是这个样子滴:

Excel VBA程序开发自学宝典

看官们可以自己分析一下这段代码,看代码是如何与俺的操作相对应滴。

Sub 宏1() ' 程序开始

' 宏1 宏(注释)

Range("A1").Select '选择“A1”单元格(步骤1)

ActiveCell.FormulaR1C1 = "数字" '在单元格“A1”中输入“数字”(步骤1)

Range("A2").Select '选择“A1”单元格(步骤2)

ActiveCell.FormulaR1C1 = "1" '在单元格“A2”中输入“1”(步骤2)

Selection.AutoFill Destination:=Range("A2:A101"), Type:=xlFillSeries '利用填充的方式,在“A2”到“A101”中输入数字1到100,Autofill(步骤3)

Columns("A:A").Select '选中A列(步骤4)

Selection.AutoFilter '选中“筛选”功能(步骤5)

ActiveSheet.Range("$A$1:$A$101").AutoFilter Field:=1, Criteria1:=Array("13" _

, "17", "21", "25", "32", "35", "38", "43", "49", "5", "51", "56", "6", "62", "63", "71", "75", _

"77", "80", "85", "87", "88", "94", "95", "97", "99"), Operator:=xlFilterValues '仅显示选定的数字(步骤6)

End Sub '程序结束

三、逐步分析代码

那位说了,VBA代码的运行过程,一般都是“嗖”一下,Done,俺怎么知道俺的分析对不对呢,程序执行一步,俺就想看一下结果噻。

这个很简单,使用程序的单步调试,让程序按指挥,一步步运行,这样滴描述,让程序员大哥大姐们贱笑啦,哈哈。

下面,让我们再次举起刚才那个活生生、血淋淋的小栗子,现场直播一下程序的运行过程。

请大家同时打开Excel的工作表界面和VBA程序界面,最好并排显示,就像俺这样滴,这样你就能一边看控制程序单步运行,一边看表格中的运行结果啦。

Excel VBA程序开发自学宝典 如何开始程序捏?激活程序窗口,也就是点一下程序那半边窗口滴意思。

按一下键盘上滴“F8”,嗯,当前执行的语句好黄啊,从我按下“F8”的那一刻,他就变了,继续按“F8”,程序就会逐句变黄,也奏是在逐句执行,这个时候观察表格窗口,就能看到每一句代码的运行结果。

比如,执行完步骤4时,整个画面是这个样子滴,这么逐句滴分析下来,肯定能充分理解代码滴含义咧。

Excel VBA程序开发自学宝典

总结一下,从一个木有啥编程经验的VBA小白,想要快速学习VBA,很简单,理解ta,得到ta,详细分析ta,脱单有望啊。

今天先回答道这里,如果大家喜欢呢,会继续介绍。


相关文章

文章评论

表情

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

标签云

站长特荐